package com.jml.zookeeper.二期.分布式锁;

/**
 * @author:jml
 * @date: 2019/12/9 10:23 @description：
 */
abstract class AbstractTemplzateLock implements Lock {
	
    @Override
    public void getLock() {
        // 模版方法 定义共同抽象的骨架
        if (tryLock()) {
            System.out.println(">>>" + Thread.currentThread().getName() + ",获取锁成功");
        } else {
            // 开始实现等待
            waitLock();// 事件监听
            // 重新获取
            getLock();
        }

    }

    /**
     * 获取锁
     *
     * @return
     */
    protected abstract boolean tryLock();

    /**
     * 等待锁
     *
     * @return
     */
    protected abstract void waitLock();

    /**
     * 释放锁
     *
     * @return
     */
    protected abstract void unImplLock();

    /**
     * @Description:断开连接释放锁
     * @param
     * @return:
     */
    @Override
    public void unLock() {
        unImplLock();
    }
}
